

import 'package:english_words/english_words.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

class ListPage extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    return new ListPageState();
  }
  
}

class ListPageState extends State<ListPage>{
  final _words = <WordPair>[];
  final _saved = new Set<WordPair>();
  final _fontStyle = const TextStyle(fontSize: 18.0);
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text("ListPage"),
        actions: <Widget>[
          new IconButton(icon: new Icon(Icons.list),onPressed: _pushSaved),
        ],
      ),
      body: _buildList(),
    );
  }

  void _pushSaved(){
    // Navigator.of(context).push(
    //   new MaterialPageRoute(
    //     builder: (context){
    //       final tiles = _saved.map(
    //         (pair) {
    //           return new ListTile(
    //             title: new Text(
    //               pair.asPascalCase,
    //               style: _fontStyle,
    //             )
    //           );
    //         }
    //       );
    //       final divided = ListTile.divideTiles(tiles: tiles,context: context).toList();
    //       return new Scaffold(
    //         appBar: new AppBar(
    //           title: new Text("Saved Select")
    //         ),
    //         body: new ListView(children: divided),
    //       );
    //     }
    //   )
    // );

    final lastTile =_saved.last;
    Navigator.pushNamed(
      context,
      '/detailPage',
      arguments: <String,String>{
        'title': lastTile.asPascalCase
      }
    );
  }

  Widget _buildList() {
    return new ListView.builder(
      padding: const EdgeInsets.all(16.0),
      itemBuilder: (context,i){
        if (i.isOdd) return new Divider();
        final index = i ~/ 2;
        if(index >= _words.length){
          _words.addAll(generateWordPairs().take(10));
        }
        return _buildRow(_words[index]);
      }
    );
  }

  Widget _buildRow(WordPair pair){
    final alreadySaved = _saved.contains(pair);
    return new ListTile(
      title: new Text(
        pair.asPascalCase,
        style: _fontStyle
      ),
      trailing: new Icon(
        alreadySaved ? Icons.favorite : Icons.favorite_border,
        color: alreadySaved ? Colors.red : null,
      ),
      onTap: (){
        setState(() {
          if(alreadySaved){
            _saved.remove(pair);
          }
          else{
            _saved.add(pair);
          }
        });
      },
    );
  }

}